package satk.objetos;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import satk.beans.interfaces.IntObjetos;

/**
 * ALmacena la información de una paersona
 * @author Sergio Flores Genis <http://sergenis.x10.mx>
 */
public class Persona
        implements IntObjetos, Serializable {

    private static final long serialVersionUID = 78277793L;
    private Integer identificador = -1;
    private String primerNombre = "";
    private String segundoNombre = "";
    private String paterno = "";
    private String materno = "";
    private String sexo = "";
    private Date nacimiento;
    private String boleta = "";
    private Institucion institucion;

    /** Creates a new instance of Persona */
    public Persona() {
        institucion = new Institucion();
    }

    public Persona(Integer identificador, String primerNombre, String segundoNombre, String paterno, String materno, String sexo, Date nacimiento, String boleta, Institucion institucion) {
        this.identificador = identificador;
        this.primerNombre = primerNombre;
        this.segundoNombre = segundoNombre;
        this.paterno = paterno;
        this.materno = materno;
        this.sexo = sexo;
        this.nacimiento = nacimiento;
        this.boleta = boleta;
        this.institucion = institucion;
    }

    // ATRIBUTO: identificador
    @Override
    public void setIdentificador(Integer id) {
        this.identificador = id;
    }

    @Override
    public Integer getIdentificador() {
        return identificador;
    }

    // ATRIBUTO: primerNombre
    public void setPrimerNombre(String primerNombre) {
        this.primerNombre = primerNombre;
    }

    public String getPrimerNombre() {
        return primerNombre;
    }

    // ATRIBUTO: segundoNombre
    public void setSegundoNombre(String segundoNombre) {
        this.segundoNombre = segundoNombre;
    }

    public String getSegundoNombre() {
        return segundoNombre;
    }

    // ATRIBUTO: paterno
    public void setPaterno(String paterno) {
        this.paterno = paterno;
    }

    public String getPaterno() {
        return paterno;
    }

    // ATRIBUTO: materno
    public void setMaterno(String materno) {
        this.materno = materno;
    }

    public String getMaterno() {
        return materno;
    }

    // ATRIBUTO: sexo
    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public String getSexo() {
        return sexo;
    }

    // ATRIBUTO: nacimiento
    public void setNacimiento(Date nacimiento) {
        this.nacimiento = nacimiento;
    }

    public Date getNacimiento() {
        return nacimiento;
    }

    // ATRIBUTO: boleta
    public void setBoleta(String boleta) {
        this.boleta = boleta;
    }

    public String getBoleta() {
        return boleta;
    }

    // ATRIBUTO: institucion
    public void setInstitucion(Institucion institucion) {
        this.institucion = institucion;
    }

    public Institucion getInstitucion() {
        return institucion;
    }

    public String getFullName() {
        return String.format("%s %s %s %s",
                primerNombre, segundoNombre, paterno, materno);
    }

    @Override
    public String toString() {
        return String.format("PERSONA@[%d;%s]", identificador, getFullName());
    }

    public String getInsSiglas() {
        return institucion.getSiglas();
    }

    @Override
    public Object clon() {
        try {
            return this.clone();
        } catch (CloneNotSupportedException ex) {
        }
        return null;
    }

    @Override
    public List<Throwable> valida() {
        java.util.List<Throwable> list = new java.util.LinkedList<Throwable>();
        if(primerNombre.isEmpty()){
            list.add(new Throwable("Indique el primer nombre"));
        }
        if(paterno.isEmpty()){
            list.add(new Throwable("Inique el apellido paterno"));
        }
        if(materno.isEmpty()){
            list.add(new Throwable("Inique el apellido materno"));
        }
        if(sexo.isEmpty()){
            list.add(new Throwable("Inique el sexo"));
        }
        if(boleta.isEmpty()){
            list.add(new Throwable(""));
        }
        if(institucion == null){
            list.add(new Throwable(""));
        }
        return list;
    }
}
